package com.imooc.SmartChargeStation.demo.mqtt.PahoMode.service.impl;

import lombok.extern.slf4j.Slf4j;
import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttCallback;
import org.eclipse.paho.client.mqttv3.MqttMessage;

/**
 * author: zpy
 * description: mqtt回调类
 * date: 2025/8/16
 */

@Slf4j//无需手动申明Logger对象，在编译的时候会自动为该类生成一个名为log的日志对象
//private static final Logger log = LoggerFactory.getLogger(Callback.class);不采用注解就这么写
/**
 怎么理解这个？
 就是个通信管家。你不需要一直主动的去检查状态，是一个异步处理。比如：时刻检查手机还有没有网络，只有断开才会提示。
 当手机断网了，他会通知你;有人给你发消息，他会提醒你；你给别人发消息成功后，他会告诉你发送失败还是成功。
 */
public class Callback implements MqttCallback {

    /**
     * description: 连接断开时调用
     * @param throwable:
     * @return void
     * Understanding：就像你的手机网络断了，这个方法就会被触发，告诉你"网络断了，原因是..."。
     */
    @Override
    public void connectionLost(Throwable throwable) {
        log.info(">>>>>连接断开，原因：" + throwable.getMessage());
    }

    /**
     * description: 接收到订阅的消息后调用
     * @param topic:
     * @param mqttMessage:
     * @return void
     * Understanding：你收到微信消息时手机会"叮"一声。这个方法就会被触发，告诉你“谁”发了“什么消息”给你
     */
    @Override
    public void messageArrived(String topic, MqttMessage mqttMessage) throws Exception {
        log.info(">>>>>接收主题"+topic+"的消息：" + mqttMessage.toString());
    }

    /**
     * description: 发送消息成功调用的方法
     * @param iMqttDeliveryToken:
     * @return void
     * Understanding：使用微信的时候，你给对方发消息出现红色感叹号，说明对方把你拉黑了，弹窗显示：消息未发送成功。
     */
    @Override
    public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
        log.info(">>>>>消息发送是否成功："+iMqttDeliveryToken.isComplete());
    }
}
